PROJECT = "DTU3.1"
VERSION = "001.000.000"
-- 使用合宙iot平台时需要这个参数
PRODUCT_KEY = "ipHKMAtPHuHJf9TI3wGkqVYxBu3ouQOd" -- 到 iot.openluat.com 创建项目,获取正确的项目id

_G.sys = require 'sys'
_G.sysplus = require 'sysplus'
-- 加载拓展库
libfota2 = require "libfota2"
netLed=require "netLed"
lbsLoc = require "lbsLoc"
exgnss = require "exgnss"
libnet = require "libnet"
--wifi
dhcpsrv = require "dhcpsrv"
--个人库
hconfig=require "hconfig"
hadc = require "hadc"
htf = require "htf"
h485=require "h485"
h232=require "h232"
htool=require "htool"
hgps=require "hgps"
hsocket=require "hsocket"
hled=require "hled"
hlan=require "hlan"
hwifi = require "hwifi"

-- 在日志中打印项目名和项目版本号
log.info("main", PROJECT, VERSION)

-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
if wdt then
    wdt.init(9000) -- 初始化watchdog设置为9s
    sys.timerLoopStart(wdt.feed, 3000) -- 3s喂一次狗
end

-- 升级结果的回调函数
-- 功能:获取fota的回调函数
-- 参数:
-- result:number类型
--   0表示成功
--   1表示连接失败
--   2表示url错误
--   3表示服务器断开
--   4表示接收报文错误
--   5缺少必要的PROJECT_KEY参数
local function fota_cb(ret)
    log.info("fota", ret)
    if ret == 0 then
        log.info("fota","升级包下载成功,重启模块")
        rtos.reboot()
    else
        log.info("fota","升级返回ret为", ret)
    end
end

h485.init_sys_param()

sys.taskInit(function()
    while not socket.adapter(socket.dft()) do
        log.warn("fota", "wait IP_READY", socket.dft())
        -- 在此处阻塞等待默认网卡连接成功的消息"IP_READY"
        -- 或者等待1秒超时退出阻塞等待状态;
        -- 注意：此处的1000毫秒超时不要修改的更长；
        -- 因为当使用libnetif.set_priority_order配置多个网卡连接外网的优先级时，会隐式的修改默认使用的网卡
        -- 当libnetif.set_priority_order的调用时序和此处的socket.adapter(socket.dft())判断时序有可能不匹配
        -- 此处的1秒，能够保证，即使时序不匹配，也能1秒钟退出阻塞状态，再去判断socket.adapter(socket.dft())
        sys.waitUntil("IP_READY", 5000)
    end
    -- 检测到了IP_READY消息
    log.info("fota", "recv IP_READY", socket.dft())
    log.info("fota", "开始检查升级")
    libfota2.request(fota_cb, {})
end)

-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行
